<?php declare(strict_types=1);
namespace Umserv\ExchangeInterfaces\V1\Bitrix;

interface OrderHandlerInterface
{
    /**
     * Добавить заказ
     *
     * @param  $order
     * @return object | array
     */
    public function addOrder(object | array $order): \Umserv\ExchangeInterfaces\V1\Types\OrderType;

    /**
     * Получить заказ по числовому идентификатору
     *
     * @param int $order_id
     * @return \Umserv\ExchangeInterfaces\V1\Types\OrderType
     */
    public function getOrder(int $order_id): \Umserv\ExchangeInterfaces\V1\Types\OrderType;

    /**
     * Обновить флаг оплаты заказа
     *
     * @param int $order_id Числовой идентификатор заказа в системе
     * @return bool
     */
    public function updateOrderPayment(int $order_id): bool;

    /**
     * Обновить статус заказа
     *
     * @param int $order_id Числовой идентификатор заказа в системе
     * @param string $status_code
     * @return bool
     */
    public function updateOrderStatus(int $order_id, string $status_code): bool;

    /**
     * Обновить позицию заказа
     *
     * @param int $order_id Числовой идентификатор заказа в системе
     * @param \Umserv\ExchangeInterfaces\V1\Types\ProductType $product
     * @return bool
     */
    public function updateOrderItemAdd(int $order_id, \Umserv\ExchangeInterfaces\V1\Types\ProductType $product): bool;

    /**
     * Удалить позицию из заказа
     *
     * @param int $order_id Числовой идентификатор заказа в системе
     * @param int $product_id
     * @return bool
     */
    public function deleteOrderItem(int $order_id, int $product_id): bool;

    /**
     * Обновить кол-во у товарной позиции
     *
     * @param int $order_id Числовой идентификатор заказа в системе
     * @param int $product_id
     * @param int $count
     * @return bool
     */
    public function updateOrderItemCount(int $order_id, int $product_id, int $count): bool;

    /**
     * Обновить тип отгрузки
     *
     * @param int $order_id Числовой идентификатор заказа в системе
     * @param string $type
     * @return bool
     */
    public function updateOrderDeliveryType(int $order_id, string $type): bool;

    /**
     * Обновить статус отгрузки
     *
     * @param int $order_id Числовой идентификатор заказа в системе
     * @param string $status
     * @return bool
     */
    public function updateOrderShipmentStatus(int $order_id, string $status): bool;
}